package br.com.pucrs.tcc.controller;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.model.DualListModel;

import br.com.pucrs.tcc.ed.Aluno;
import br.com.pucrs.tcc.ed.AreaInteresse;
import br.com.pucrs.tcc.ed.Curso;
import br.com.pucrs.tcc.ed.Professor;
import br.com.pucrs.tcc.ed.Telefone;
import br.com.pucrs.tcc.enumerator.TipoTelefoneEnum;
import br.com.pucrs.tcc.exception.AlunoException;
import br.com.pucrs.tcc.rn.AlunoRN;
import br.com.pucrs.tcc.rn.AreaInteresseRN;
import br.com.pucrs.tcc.rn.CursoRN;
import br.com.pucrs.tcc.util.jsf.MensagemUtil;
import br.com.pucrs.tcc.util.jsf.SessionUtil;

@ManagedBean(name = "AlunoPerfilBean")
@ViewScoped
public class AlunoPerfilBean {

	private Aluno aluno;

	@EJB
	private AlunoRN mAlunoRN;

	@EJB
	private CursoRN mCursoRN;

	private List<Curso> cursos;

	private Integer cursoID;

	private Telefone foneResidencial;
	private Telefone foneCelular;
	private Telefone foneComercial;

	public AlunoPerfilBean() {
	}

	@PostConstruct
	public void carregaDados() {
		cursos = mCursoRN.lista();

		if (foneResidencial == null) {
			foneResidencial = new Telefone();
		}
		if (foneCelular == null) {
			foneCelular = new Telefone();
		}

		if (foneComercial == null) {
			foneComercial = new Telefone();
		}

		aluno = mAlunoRN.obter(SessionUtil.getMatriculaUsuarioLogado());

		if (aluno != null) {
			if (aluno.getCurso() != null) {
				cursoID = aluno.getCurso().getId();
			}

			if (aluno.getTelefones() != null) {
				for (Telefone fone : aluno.getTelefones()) {
					System.out.println("Tipo: " + fone.getTipo());
					if (TipoTelefoneEnum.getByCodigo(fone.getTipo()).equals(TipoTelefoneEnum.RESIDENCIAL)) {
						System.out.println("REsidencial: " + fone.getNumero());
						foneResidencial = fone;
					} else if (TipoTelefoneEnum.getByCodigo(fone.getTipo()).equals(TipoTelefoneEnum.CELULAR)) {
						foneCelular = fone;
					} else {
						foneComercial = fone;
					}
				}
			}
		}

	}

	public String removeMascara(String valor) {
		return valor.replace("(", "").replace(")", "").replace("-", "").replace(" ", "");
	}

	private void organizaTelefones() {
		fonesRemover = new ArrayList<Telefone>();
		if (foneResidencial.getNumero() != null && !foneResidencial.getNumero().equals("")) {

			foneResidencial.setNumero(removeMascara(foneResidencial.getNumero()));
			foneResidencial.setMatricula(aluno.getMatricula());
			foneResidencial.setTipo(TipoTelefoneEnum.RESIDENCIAL.getCodigo());

			if (foneResidencial.getId() == null || foneResidencial.getId().equals(0)) {
				aluno.getTelefones().add(foneResidencial);
			}

		} else {
			// se tinha, remove
			if (foneResidencial.getId() != null && !foneResidencial.getId().equals(0)) {
				// mProfessor.getTelefones().remove(foneResidencial);
				fonesRemover.add(foneResidencial);
			}
		}

		if (foneCelular.getNumero() != null && !foneCelular.getNumero().equals("")) {

			System.out.println("etrou errado");

			foneCelular.setNumero(removeMascara(foneCelular.getNumero()));
			foneCelular.setMatricula(aluno.getMatricula());
			foneCelular.setTipo(TipoTelefoneEnum.CELULAR.getCodigo());

			if (foneCelular.getId() == null || foneCelular.getId().equals(0)) {
				aluno.getTelefones().add(foneCelular);
			}

		} else {
			System.out.println("etrou certo");
			// se tinha, remove
			if (foneCelular.getId() != null && !foneCelular.getId().equals(0)) {
				// mProfessor.getTelefones().remove(foneCelular);
				fonesRemover.add(foneCelular);
			}
		}

		if (foneComercial.getNumero() != null && !foneComercial.getNumero().equals("")) {

			foneComercial.setNumero(removeMascara(foneComercial.getNumero()));
			foneComercial.setMatricula(aluno.getMatricula());
			foneComercial.setTipo(TipoTelefoneEnum.COMERCIAL.getCodigo());

			if (foneComercial.getId() == null || foneComercial.getId().equals(0)) {
				aluno.getTelefones().add(foneComercial);
			}

		} else {
			// se tinha, remove
			if (foneComercial.getId() != null && !foneComercial.getId().equals(0)) {
				// mProfessor.getTelefones().remove(foneComercial);
				fonesRemover.add(foneComercial);
			}
		}
	}

	ArrayList<Telefone> fonesRemover;

	public void salvar() {
		try {

			if (cursoID != null) {
				Curso c = new Curso();
				c.setId(cursoID);
				aluno.setCurso(c);
			}

			organizaTelefones();

			mAlunoRN.alterar(aluno, fonesRemover);

			MensagemUtil.mostraMensagemSucesso("Perfil alterado com sucesso.");
		} catch (AlunoException ex) {
			MensagemUtil.mostraMensagemErro(ex.getMessage());
		} catch (Exception ex) {
			MensagemUtil.mostraMensagemFatal(ex.getMessage());
			ex.printStackTrace();
		}
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public Telefone getFoneResidencial() {
		return foneResidencial;
	}

	public void setFoneResidencial(Telefone foneResidencial) {
		this.foneResidencial = foneResidencial;
	}

	public Telefone getFoneCelular() {
		return foneCelular;
	}

	public void setFoneCelular(Telefone foneCelular) {
		this.foneCelular = foneCelular;
	}

	public Telefone getFoneComercial() {
		return foneComercial;
	}

	public void setFoneComercial(Telefone foneComercial) {
		this.foneComercial = foneComercial;
	}

	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}

	public Integer getCursoID() {
		return cursoID;
	}

	public void setCursoID(Integer cursoID) {
		this.cursoID = cursoID;
	}

}
